Repo auto make wiki page - ☆Wiki Sandbox - НТЦ 'Комплексные Системы'

Csit.Delta.Client.ExcelReports.D8ExcelReport

D8-ExcelReports

Плагин для D8-Monitor, в котором реализованы функции построения стандартных для системы Дельта отчетов в формате xlsx-документов.
Реализует интерфейсы ID8Report и ID8Localization. Использует библиотеку EPPlus для работы с документами xlsx (открытый формат документов для представления электронных таблиц).

Принцип работы плагина

Плагин генерирует xlsx-отчеты, на основании макетов отчетов.
Макет - это xlsx-документ, содержащий страницу определенного формата, определяющие, какие поля ввода нужно заполнить, какие действия нужно выполнить для построения отчета, все необходимые настройки, зарание размеченные и отформатированные страницы, в которые будут выведены данные.
Построение отчета из макета разделяется на зарание установленное количество шагов. Каждый шаг представляет собой набор настроек, описания полей ввода информации и список действий, которые будут выполнены после заполнения полей ввода. Процесс выполнения шага может повлиять на настройки и поведение следующего шага. Построение отчета заканчивается, когда последний шаг успешно завершается. Отчет может содержать неинтерактивные шаги (лишенные полей ввода) - такие шаги не отображаются в пользовательском интерфейсе.

Каждые отчет может содержать специальные переменные. Их имена должны начинаться с символа #. Переменные отчета представляются собой экземпляры класса DataTable и могут использовать для передачи данных внутри отчета и между отчетом и хост-приложением.

Структура макета

Макет может содержать специальные листы с названием: Report, Step1, Step2, ..., StepN, Timings, Localization - XX.
Обязательным является только лист Step1, все остальные - опциональные. Специальные страницы разделяются (могут разделяться) на секции и блоки. Секция - это набор блоков. Блок может описывать поле ввода информации, структуру с настройками или действие.

Кроме специальных листов макет может содержать произвольное количество листов, в которые будут выводиться данные либо которые не будут использоваться плагином.

Лист Report

Содержит настройки и информацию, относящиеся ко всему макету и к окружению во время построения отчета. Лист должен содержать секцию Settings, в которой могут быть необходимые блоки.

Листы StepN

Описывают шаги построения отчета. Step1 описывает первый шаг, Step2 - второй, и так далее. Таких листов может быть произвольное количество, но как минимум один.
Каждый лист Step может содержать следующие секции:

  • Settings - содержащую блоки с настройками, относящимся к данному шагу отчета;
  • Arguments - содержащую блоки, описывающие поля для ввода информации, отображаемые на данном шаге построения отчета;
  • Commands - содержащую блоки, описывающие действия, которые должны быть выполнены на данном шаге отчета после ввода данных в поля ввода, описанные в секции Arguments.

Лист Timings

Описывает тайминги отчета - формулы задания временного интервала и шага по времени.

На листе Timings должна быть секция с таким же именем Timings. В ней размещается таблица, каждая строка которой описывает один вариант (один тайминг) задания временного интервала и шага.
Кроме того в строке содержатся настройки для отображения элементов управления, которые будут использоваться в пользовательском интерфейсе при запросе ввода временного интервала и шага.

Столбцы таблицы:

  • Name
    Наименование тайминга.
  • NEdit
    Подпись элемента управления для ввода количества временных шагов (N) смещения. Если не указана, то элемент управления не отображается.
  • NLimit
    Ограничения на значения N, которые могут быть введены. Указывается или одно число - минимально допустимое значение, или пара чисел через минус - минимально допустимое и максимально допустимое значения.
    Например: 1-100. Опционально.
  • T1Edit
    Подпись элемента управления для ввода начального момента времени (T1). Если не указана, то элемент управления не отображается. Если равняется единственному символу подчеркивания (_), то элемент управления выводится без подписи.
  • T1EditFlags
    Настройки для элемента управления ввода начального момента времени.
  • T1Shift
    Cдвиг начального момента времени. Указывает в формате TimeSpan или D8TimeInterval.
    Например: 00:01:30 или 25m. Опционально.
  • T1NCoef
    Величина одного шага смещения T1. Вводится в формате TimeSpan. Например: -00:01:00. Указывается совместно с NEdit.
  • T1Schedule
    Строка расписания для определения T1.
  • T1ScheduleRankShift
    Ранг для поиска в расписании T1 (см. описание строки определения тайминга).
  • T1ScheduleRankNCoef
    Коэффициент смещения ранга для поиска расписания T1. Ранг будет добавлено произведение величины N на этот коэффициент.
  • T1Limit
    Ограничения на значения начального момента времени, которые могут быть введены.
    Указывается или одна дата - минимально допустимое значение, или пара дат через минус - минимально допустимое и максимально допустимое значения.
    Даты указываются в формате yyyy.MM.dd.
    Опционально.
  • T2Edit
    Подпись элемента управления для ввода конечного момента времени (T2). Если не указана, то элемент управления не отображается.
  • T2EditFlags
    Настройки для элемента управления ввода конечного момента времени. Формат значения аналогичен T1EditFlags.
  • T2Shift
    Cдвиг конечного момента времени. Формат значения аналогичен T1Shift.
  • T2NCoef – шаг для расчета конца интервала
    Величина одного шага смещения T1. Формат аналогичен T1NCoef. Указывается совместно с NEdit.
  • T2Schedule
    Строка расписания для определения T2.
  • T2ScheduleRankShift
    Ранг для поиска в расписании T2.
  • T2ScheduleRankNCoef
    Коэффициент смещения ранга для поиска расписания T2. Ранг будет добавлено произведение величины N на этот коэффициент.
  • T2Limit
    Ограничения на значения конечного момента времени, которые могут быть введены. Формат аналогичен T1Limit.
  • T2IsT1Relative
    true, если T2 вычисляется относительно T1. Иначе T2 вычисляется относительно текущего времени.
  • StepEdit
    Подпись элемента управления для ввода величины шага по времени. Если не указана, то элемент управления не отображается.
  • StepMode
    Способ ввода пользователем значения шага:
    • Timespan - пользователь вводит произвольное значение временного интервала
    • FixedList - пользователь выбирает пункт из фиксированного списка вариантов
    • ValueAndUnits - пользователь вводит величину интервала и еденицы времени

      Режим задания вариантов шага в StepList:

    • Timespan - указывается одно значение в формате TimeSpan (напр, 01:00:00)
    • FixedList - указывается список вариантов в формате TimeSpan, разделенных символом /
    • ValueAndUnits
  • StepList
    Варианты шага для случая StepMode=FixedList.
    Указывается список вариантов через запятую. Каждый вариант - это величина в формате TimeSpan или D8TimeInterval, символ / и подись для этого варианта.
    Например: 1s/секунд,1m/минут,1h/часов.
  • StepLimit
    Ограничения на значения шага, которые могут быть введены.
    Указывается или одно значение TimeSpan - минимально допустимое значение, или пара значений через минус - минимально допустимое и максимально допустимое значения.
    Опционально.
Варианты задания настроек для ввода моментов времени:
  • ShowMillisecond
  • ShowSecond
  • ShowMinute
  • ShowHour
  • ShowWeekDay
  • ShowDay
  • ShowMonth
  • ShowQuarter
  • ShowYear
  • ShowTime = ShowSecond | ShowMinute | ShowHour
  • ShowTimeMs = ShowMillisecond | ShowSecond | ShowMinute | ShowHour
  • ShowDate = ShowDay | ShowMonth | ShowYear
  • ShowDateTime = ShowDate | ShowTime
  • ShowDateTimeMs = ShowDate | ShowTimeMs
  • EditMillisecond
  • EditSecond
  • EditMinute
  • EditHour
  • EditWeekDay
  • EditDay
  • EditMonth
  • EditQuarter
  • EditYear
  • EditTime
  • EditTimeMs
  • EditDate
  • EditDateTime
  • EditDateTimeMs
  • Millisecond = ShowMillisecond | EditMillisecond
  • Second = ShowSecond | EditSecond
  • Minute = ShowMinute | EditMinute
  • Hour = ShowHour | EditHour
  • WeekDay = ShowWeekDay | EditWeekDay
  • Day = ShowDay | EditDay
  • Month = ShowMonth | EditMonth
  • Quarter = ShowQuarter | EditQuarter
  • Year = ShowYear | EditYear
  • Time = ShowTime | EditTime
  • TimeMs = ShowTimeMs | EditTimeMs
  • Date = ShowDate | EditDate
  • DateTime = ShowDateTime | EditDateTime
  • DateTimeMs = ShowDateTimeMs | EditDateTimeMs

Листы Localization - XX

Содержат словарь для перевода терминов, используемых в плагине (и в его хост-приложении), на читаемый язык. XX - это идентификатор локализации, например ru, или любой произвольный идентификатор. Словарь разделяется на секции.

Структура блоков листов Report и Step

Каждый блок - это прямоугольный регион ячеек excel. Блоки разделяются пустой строкой.
Левая верхняя ячейка - это тип блока. В коде задается атрибутом D8ReportCommand и соответствует классу .NET.
Во втором столбце содержится название свойства блока (может содержать точки как разделители подклассов).
В третьем столбце содержится значение для свойства. Если значение - это массив, то его значение будет занимать ячейки начиная с третьего столбца и правее вплоть до первой пустой ячейки.
Например:

ParamTable | Caption              | НСИ
           | Value.ParamSids      | TEST.1 | TEST.2    |
           | Value.ParamDbFields  | SID    | LocalName | GroupName
           | MinParamCount        | 1
           | MinFieldCount        | 1
           | MaxFieldCount        | 20

Значения свойства блока могут передаваться из отчета в код палгина, из кода в отчет или туда и обратно.
Свойства, начинающиеся на Value. считаются результатом обработки блока.

Блоки по назначению подразделяются на блоки-настройки, блоки-аргументы и блоки-команды.

Блоки-настройки (блоки Settings)

Классы, наследованные от SettingsBlockBase, опционально IBlockInit.
Блоки-настройки содержаться в секции Settings листа Report или StepN и представляют структуры данных для передачи настроек и информации о контексте выполнения из макета в код или из кода в отчет.

ReportSettings

Содержит настройки для всего отчета. Такой блок должен располагаться на листе Report и может быть только один.

Свойства блока:

  • ResultFilename [ValueIsFormula]
    Имя или путь файла отчета. Путь может быть относительным. В таком случае он задается относительно пути выходной папки, задаваемой хост-приложением.
  • BreakOnWarningInSummary (false/true)
    Если true, то построение отчета прерывается при первом предупреждении, записанном в сводку выполнения отчета.
  • BreakOnErrorInSummary (false/true)
    Если true, то построение отчета прерывается при первой ошибке, записанной в сводку выполнения отчета.
  • SupportedFormat
    Список форматов, поддерживаемых данным макетом отчета. Может быть одним значением или комбинацией значений. Варианты:
    • Excel - отчет генерируется в виде xlsx-документа. Это значение по умолчанию.
    • Table - отчет генерирует таблицу с данными, которую может отобразить хост-приложение.
    • Slide - мнемосхема, которую может отобразить хост-приложение.

ReportContext

Содержит информацию о контексте выполнения отчета. Почти все свойства этого блока предназначены для чтения другими блоками. Значения для этих свойств записываются в начальный момент выполнения отчета и не могут быть заданы заранее в макете. Исключения составляют свойства Timezone и LocalizationId.

Свойства блока:

  • Timezone [OutputToWorksheet]
    Часовой пояс, используемый при построении отчета.
    В это свойства записывается строка с описанием часового пояса, выбранного пользователем. См. [ Строка определения временной зоны ]
    Если значение этого свойства указано в макете, то оно не изменяется при построении отчета. Таким образом часовой пояс может быть задан на уровне хост-приложения, либо на уровне макета.
     
  • Timezone_UtcBias [OutputToWorksheet]
    Сдвиг часового пояса Timezone относительно UTC в часах.
     
  • LocalizationId [OutputToWorksheet]
    Идентификатор культуры, используемый для локализации отчета.
    В это свойства записывается строка с описанием культуры, выбранной пользователем.
    Если значение этого свойства указано в макете, то оно не изменяется при построении отчета.
  • Timestamp [OutputToWorksheet]
    Время построения отчета (локальное).
  • PrincipalName [OutputToWorksheet]
    Наименование учетной записи, из-под которой запущен процесс построения отчета.
  • PrincipalCategory [OutputToWorksheet]
    Категория учетной записи PrincipflName.
  • WinUserName [OutputToWorksheet]
    Имя учетной записи пользователя Windows, из-под которой запущен процесс построения отчета.
     
  • WinUserDomainName [OutputToWorksheet]
    Домен пользователя WinUserName.
  • WinMachineName [OutputToWorksheet]
    Имя компьютера, на котором запущен процесс построения отчета.
  • CurrentFormat [OutputToWorksheet]
    Формат отчета, выбранный для построения отчета:
    • Excel
    • Table
    • Slide

StepSettings

Блок с настройками обработки шага построения отчета. Такой блок может быть только один, и может быть указан только на листе StepN.

Свойства:

  • Caption
    Заголовок шага.
  • OptionalStep (false/true)
    Если значение true, то шаг построения считается опциональным в смысле пользовательского интерфейса. Т.е. если шаг отмечен флагом OptionalStep и он не содержит блоков аргументов, то для этого шага в пользовательском интерфейсе не будет сгенерировано страницы, на которой пользователь мог бы задать настройки. Вне зависимости от этого блоки-команды на этом шаге выполнены будут.
  • ForceNotLast (false/true)
    Если значение true, то модуль построения отчета будет считать, что этот шаг построения отчета не последний. Свойство может быть полезно в случаях, когда новые шаги отчета генерируются по ходу выполнения предыдущих шагов.

Блоки-аргументы (блоки Arguments)

Классы, наследованные от ArgumentBlockBase<T>, опционально от IBlockInit, опционально от IBlockValidate, где T - это тип фактического значения аргумента.
Блоки-аргументы содержаться в секции Arguments листа StepN и описывают одно поле ввода информации для кокретного шага отчета.
Каждый блок-аргумент имеет следующие свойства:

  • Name
    Имя аргумента. Если не указано, то за имя принимается тип блока.
  • Caption
    Заголовок, поля ввода, отображаемый хост-приложением.
  • Hint
    Подсказка для поля ввода.
  • Visible
    По умолчанию true. Если false, то поле ввода не отображается.
  • LocalizationId
    Идентификатор локализации.
  • LocalizationSection
    Секция локализации.
  • Value
    Значение поля ввода. В макете может быть задано значение по умолчанию. В отчет будет скопировано значение, фактически введенное в поле ввода.

TextBox

Поле для ввода текста.

Свойства:

  • Value
    Текст, введенный в поле ввода.

ComboBox

Поле ввода типа выпадающего списка.

Свойства:

  • Items
    Массив строк с элементами выпадающего списка.
  • AllowEmpty (false/true)
    Определяет, разрешено ли оставлять поле ввода пустым.
  • Value
    Индекс выбранного элемента в выпадающем списке (от нуля).
  • Value_ItemIndex [ValueIsAddress]
    Индекс выбранного элемента в выпадающем списке (от нуля).
  • Value_ItemText [ValueIsAddress]
    Текст выбранного элемента в выпадающем списке.

CheckBox

Поле ввода типа "флажок" (чек-бокс).

Свойства:

  • Value (false/true)
    true если в поле ввода флажок поставлен, иначе false.

CheckedList

Поле ввода в виде списка флажков (чек-боксов).

Свойства:

  • Items
    Массив из строк, представляющих элементы списка.
  • MultiSelect (false/true)
    true если в списке разрешено отмечать несколько позиций, иначе false.
  • AllowEmpty
    true если разрешено оставить список без отметок. false если нужно отметить хотя бы одну позицию, чтобы формирование отчета можно было продолжить.
  • Value
    Массив индексов отмеченных позиций в списке (индексы от нуля). В макете в это свойство можно записать значение поля ввода по умолчанию (определить, какие позиции по умолчанию отмечены).
     
  • Value_SelectedItemsIndex [ValueIsAddress]
    Сюда выводится массив индексов отмеченных позиций в списке (индексы от нуля).
  • Value_ItemsChecked [ValueIsAddress]
    Сюда выводится массив типа bool (значение false/true). В массиве будет по одному элементу на каждую позицию в списке. Элемент массив будет равен true, если соответствующая позиция отмечена.
  • Value_SelectedItemsText [ValueIsAddress]
    Сюда выводится массив, состоящий из элементов Items, для которых был отмечен флажок.
  • Value_SelectedItemsMergedText [ValueIsAddress]
    Сюда выводится строка, сформированная из текста всех отмеченных позиций через запятую. Это можно использовать для формирования значений типа enum.
  • Value_SelectedItemsCount [ValueIsAddress]
    Сюда выводится количество отмеченных позиций.

ListBox

Поле ввода в виде списка текстовых строк, из которых пользователь может выбрать одну или несколько позиций.

Свойства:

  • Items
    Массив из строк, представляющих элементы в списке.
  • Multiselect (false/true)
    true, если пользователю разрешено выбирать несколько позиций в списке.
  • Value
    Значение поля. Массив из строк, сформированный из элементов списка, выбранных пользователем.

Timing

Поле для ввода временного диапазона или одного момента времени и типа тайминга.
Доступные варианты таймингов, задаются в макете на специальном листе Timings.

Свойства:

  • AutoFix
    Если true, то выполняется автоматическая коррекция времменного диапазона, введенного в поле ввода.
    Коррекция выполняется по следующему алгоритму.
    Если T1 не задано, то туда записывается текущее локальное время, скорректированное по правилам тайминга.
    Если T2 не задано, то туда записывается T1 + Step * N.
  • Value.TimingType
    Выбранный тип тайминга.
  • Value.Step (D8TimeInterval)
    Длина одного шага.
  • Value.N
    Величина временного диапазона, выраженная в шагах, длина которых задается в свойстве Value.Step.
  • Value.T1
    Начало диапазона.
  • Value.T2
    Конец диапазона.

ParamTable

Поле ввода в виде таблицы параметров. Пользователь может добавлять в таблицу параметры Дельта и выбирать набор столбцов.

Свойства:

  • MinParamCount
    Минимальное количество параметров, которое необходимо добавить в таблицу.
  • MaxParamCount
    Максимальное количество параметров, которое можно добавить в таблицу.
  • MinFieldCount
    Минимальное количество столбцов, которое необходимо выбрать в таблице.
  • MaxFieldCount
    Максимальное количество столбцов, которое можно выбрать в таблице.
  • Value.ParamSids
    Массив SID-идентификаторов параметров Дельта, которые пользователь добавил в таблицу.
  • Value.ParamDbFields
    Массив названий полей НСИ, которые пользователь добавил в таблицу, выбрав в таблице отображаемые колонки.

DataTable

Поле для передачи табличных данных их хост-приложения в отчет. Позволяет хост-приложению записать таблицу данных (ID8Table) в переменную отчета.

Свойства:

  • DstVariable [ValueIsAddress]
    Название переменной отчета, в которую должна быть сохранена таблица с данными. Если DstVariable не задано, то в качестве имени переменной используется имя этого поля ввода (Name).

CustomControl

Нестандартное поле ввода.

Свойства:

  • ControlType
    Название типа, реализующего элемент управления. Экземпляр этого типа будет создан и использован в качестве поля ввода.
  • Value
    Значение поля ввода произвольного типа (object).

Блоки-команды (блоки Commands)

Классы, наследованные от CommandBlockBase.
Блоки-команды содержаться в секции Commands листа StepN и описывают действия, которые нужно выполнить на конкретном шаге построения отчета после ввода данных в блоки-аргументы.
Каждый блок-команда имеет следующие свойства:

  • DstAddress [ValueIsAddress]
    Адрес региона ячеек или название переменной отчета, куда будет выведен результат команды.
    Если значение свойства начинается с #, то это название переменной отчета.
  • DstRangeOffset
    Сдвиг в регионе DstAddress в формате RC.
  • RecordSpan
    Количество строк, которое занимает одна запись вертикальной таблицы (для горизонтальной таблицы - количество столбцов для горизонтальной таблицы).
  • RecordLength
    Количество ячеек, занимаемых одной записью в таблице.
  • DstRangeSnap
    Направление, в котором нужно сместить регион с результатами выполнения, чтобы удалить пустые строки/столбцы из отчета.
    Возможные значения: Up, Down, Right, Left. По умолчанию - не задано (0).
  • DstRangeFormat
    Флаги форматирования региона с результатами выполнения. Возможные значения:
     
    • Reshape
      Подогнать форматирование региона DstAddress под фактический размер данных путем растягивания прямоугольной таблицы за ее правую нижнюю ячейку.
       
    • GrowInsert
      Увеличить размер региона DstAddress под фактический размер данных путем копирования последней строки региона и ее вставки вниз вместе с форматированием.
       
    • AllowSingleRow
      Разрешает сжимать регион до одной строки (или столбца).
       
  • Orientation
    Ориентация данных (в рядах/в столбцах).
    Возможные значения: Rows, Columns. По умолчанию - Rows (0).
  • Header
    Флаги, определяющие заголовки таблицы и записей в таблице.
    По умолчанию - не задано (0).
    Возможные значения:
    • TableHeader - выводить заголовок таблицы
    • RecordHeader - выводить заголовки записей в таблице
    • ColumnFilter - добавить фильтр excel по значения столбцов таблицы
    • ColumnAutosize - автоподгон ширины столбцов таблицы
  • AutoBordersInside
    Стиль границ, которые будут автоматически нарисованы внутри таблицы.
    По умолчанию - не задано (0 - не рисовать).
    Возможные значения:
    • Hair
    • Dotted
    • DashDot
    • Thin
    • DashDotDot
    • Dashed
    • MediumDashDotDot
    • MediumDashed
    • MediumDashDot
    • Thick
    • Medium
    • Double
  • LocalizationId
    Идентификатор локализации.
  • LocalizationSection
    Секция локализации.

При выполнении блока-команды форматирование, которое можно задать с помощью свойств DstRangeSnap, Header, AutoBordersInside и других не выполняется, если DstAddress ссылается на регион на листе StepN.

DrawTable

Команда выводит таблицу на лист excel. Исходной таблицей может быть переменная отчета либо регион ячеек excel.

Свойства:

  • SrcAddress
    String [ValueIsAddress]
    Адрес исходных данных.
    Если значение представляет собой строку, которая начинается на #, то это исходный адрес - это переменная отчета, в которой содержится таблица данных (ID8Table). В этом случае исходные данные - это содержимое этой таблицы.
    Если значение - это ссылка на регион ячеек или адрес региона ячеек, то исходные данные берутся из этого региона.
  • SrcOrientation (Rows/Columns)
    Ориентация исходных данных:
    • Rows - записи ориентированы в рядах (по умолчанию).
    • Columns - записи в строках.
  • BreakOnEmptyRow (false/true)
    Если true, то копирование исходных данных будет прекращено на первом обнаруженном пустом ряду данных.

RemoveFormula

Команда удаляет формулы excel с указанного листа, предварительно выполняя формулы и заменяя их на значения.

Свойства:

  • Worksheets
    Массив из имен листов excel.
    Каждый элемент массива может содержать символы подстановки (wildcards).

ShowHideSheet

Скрывает, отображает или удаляет один или множество листов excel.

Свойства:

  • Worksheets
    Массив из имен листов excel.
    Каждый элемент массива может содержать символы подстановки (wildcards).
  • State
    Состояние, в которое нужно перевести листы excel:
    • Visible - лист отображается.
    • Hidden - лист скрывается.
    • VeryHidden - лист скрывается без возможности его отображения из excel.
  • Delete (false/true)
    Если true, то листы будут удалены вместо того, чтобы просто изменить их статус видимости.

RenameWorksheet

Выполняет копирование содержимого одного или нескольких листов excel внутрь указанного листа.
Скопированные листы опционально удаляются.
Листы объединяются вертикально.

Свойства:

  • DestWorksheet
    Имя листа, в который будут скопированы листы Worksheets.
     
  • Worksheets
    Массив из имен листов excel.
    Каждый элемент массива может содержать символы подстановки (wildcards).
     
  • Delete
    Если true, то листы будут удалены после копирования.

AppendSheet

Выполняет копирование содержимого одного или нескольких листов excel внутрь указанного листа. Листы объединяются вертикально.
Скопированные листы опционально удаляются.

Свойства:

  • DestWorksheet
    Имя листа, в который будут скопированы листы Worksheets.
  • Worksheets
    Массив из имен листов excel.
    Каждый элемент массива может содержать символы подстановки (wildcards).
  • Delete
    Если true, то листы будут удалены после копирования.

SqlQuery

Команда выполняет SQL-запрос в базе данных указанного инстанса или произвольной БД.
Если используется инстанс, то авторизация выполняется в контексте хост-приложения.

Свойства:

  • Instance
    Имя инстанса, чью базу данных нужно использовать для выполнения запроса.
    Если не указано, то для подключения к БД будет использоваться строка подключения ConnectionString.
  • InstanceDb
    Часть инстанса Instance:
    • ParamDb - база данных НСИ.
    • Archive - архивная БД.
    • MetaDb - мета-БД.
  • ConnectionString
    Строка подключения к БД. Используется, если не задано свойство Instance.
  • Sql
    Текст SQL-запроса.

ReadParamDb

Команда выполняет поиск параметров Дельта и чтение полей НСИ.
В результат выполнения команды выводится таблица, набор столбцов которой задается свойством ParamDbFields, а строки соответствуют найденным параметрам Дельта.
Если указано хотя бы одно свойство FindParamInstanceTypeRegex, FindParamInstanceNameRegex или FindParamInstanceQuery, то поиск параметров выполняется с использованием этой группы свойств.
В этом случае инстансы находятся с помощью указанного регулярного выражения для типов инстансов и имен инстансов.
Опционально может быть указана строка запроса параметров, выполняемого в НСИ найденных инстансов.
Если ни одного свойств FindParamXxx не задано, то поиск выполняется по SID-идентификаторам, заданных в свойствах ParamSids и ParamSidsBase.

Свойства:

  • ParamDbFields
    Массив строк с именами полей НСИ, которые нужно вывести в результат выполнения команды.
  • Multiline (false/true)
    Если true, то все поля НСИ одного параметра записываются в результат выполнения команды в одну ячейку в виде многострочного текста.
  • ParamSids
    Массив с SID-идентификаторами параметров, для которых нужно прочитать поля НСИ. Идентификаторы могут быть относительными. В этом случае абсолютные SID формируются с помощью ParamSidsBase.
  • ParamSidsBase
    Массив базовых SID-идентификаторов.
  • FindParamInstanceTypeRegex
    Регулярное выражение для типов инстансов, которые включаются в поиск параметров.
  • FindParamInstanceNameRegex
    Регулярное выражение для имен инстансов, которые включаются в поиск параметров.
  • FindParamInstanceQuery
    Запрос к НСИ найденных инстансов. Если не указан, то используются все параметры каждого найденного инстанса.

GetInstanceList

Выводит список доступных инстансов. Возвращает таблицу из единственного столбца с именем инстанса.
Список инстансов может быть выведен в таблицу или переменную с адресом DstAdress и/или записано в регион с адресом Value.
В регион Value выводится массив из имен инстансов.
В результирующую таблицу выводятся столбцы:
  • Index - индекс строки (номер от нуля).
  • InstanceId - идентификатор инстанса.
  • InstanceName - имя инстанса.
  • InstanceDisplayName - отображаемое имя инстанса.

Свойства:

  • Value
    Если задано, то означает адрес ячейки, по которому нужно вывести список инстансов.
  • InstanceTypeRegex
    Регулярное выражение для поиска инстансов по названиям их типов. Если это свойство не задано, то в поиск включаются инстансы любых типов.
  • InstanceNameRegex
    Регулярное выражение для поиска инстансов по их имени. Если это свойство не задано, то в поиск включаются инстансы с любым именем.

GetInstDevices

Команда выполняет поиск устройств в НСИ инстансов с помощью регулярных выражений для типов и имен инстансов и имен приборов.

В результирующую таблицу выводятся столбцы:
  • Index - индекс строки (номер от нуля).
  • InstanceId - идентификатор инстанса.
  • InstanceName - имя инстанса.
  • InstanceDisplayName - отображаемое имя инстанса.
  • Id - идентификатор прибора.
  • Name - имя прибора.

Свойства:

  • InstanceTypeRegex
    Регулярное выражение для поиска инстансов по названиям их типов. Если это свойство не задано, то в поиск включаются инстансы любых типов.
  • InstanceNameRegex
    Регулярное выражение для поиска инстансов по их имени. Если это свойство не задано, то в поиск включаются инстансы с любым именем.
  • NameRegex
    Регулярное выражение для поиск приборов в НСИ по их наименованиям. Если это свойство не задано, то возвращаются все приборы для каждого найденного инстанса.

GetInstGroups

Команда выполняет поиск групп параметров в НСИ инстансов с помощью регулярных выражений для типов и имен инстансов и наименований групп параметров в НСИ.

В результирующую таблицу выводятся столбцы:
  • Index - индекс строки (номер от нуля).
  • InstanceId - идентификатор инстанса.
  • InstanceName - имя инстанса.
  • InstanceDisplayName - отображаемое имя инстанса.
  • Id - идентификатор группы.
  • Name - имя группы.

Свойства:

  • InstanceTypeRegex
    Регулярное выражение для поиска инстансов по названиям их типов. Если это свойство не задано, то в поиск включаются инстансы любых типов.
  • InstanceNameRegex
    Регулярное выражение для поиска инстансов по их имени. Если это свойство не задано, то в поиск включаются инстансы с любым именем.
  • NameRegex
    Регулярное выражение для поиск групп параметров в НСИ по их наименованиям. Если это свойство не задано, то возвращаются все групп параметров для каждого найденного инстанса.

ReadArchive

Команда чтения архивных значений параметров Дельта.

Заменена командой ReadArchive2.

Свойства:

  • Start
    Начальный момент времени диапазона запрашиваемых архивных значений.
  • Stop
    Конечный момент времени диапазона запрашиваемых архивных значений.
  • Timezone
    Часовой пояс, в который нужно переводить метки времени.
  • GroupBy
    Способ группировки результирующих данных.
    • Time - по времени.
    • Param - по параметру.
    • ParamBase - по базовым SID-идентификаторам.
    • ParamBaseAndTime - по базовым SID-идентификаторам и времени.
  • DataFields
    Поля значений, выводимые в результат:
    • Moment - запрошенный момент времени.
    • MomentOA - запрошенный момент времени в виде числа (OA Date).
    • SID - идентификатор SID параметра Дельта.
    • Timestamp - метка времени значения.
    • TimestampOA - метка времени значения в виде числа (OA Date).
    • Value - значение в виде числа.
    • ValueString - значение в виде строки.
    • ValueAuto - значение с автоматическим определением нужного формат (строка/число).
    • State - состояние значения (в виде числа).
    • StateString - состояние значения (в виде строки).
    • StateHex - состояние значения (в виде строки с шестнадцатеричным представлением).
    • XState - расширенное состояние значения.
    • Quality - качество значения.
    • RowNumber - порядковый номер строки.
  • ParamSids
    SID-идентификаторы параметров, чьи значения нужно прочитать из архива.
  • Bounds
    Нужно ли считывать граничные точки:
    • None - не задано (по умолчанию, равносильно NoBounds).
    • NoBounds - не нужно.
    • LeftRight - нужно найти левую и правую границы.
  • Coef
    Коэффициент, на который будут помножены прочитанные значения.
  • Step (D8TimeIntervalLong)
    Шаг по времени, с которым нужно вычитывать значения из архива.
  • StopInclusive (false/true)
    Если true, то значение с меткой времени Stop включается в выборку.
  • Aggregate (D8Aggregate)
    Метод агрегирования данных внутри каждого шага Step.
  • Interpolation (D8Interpolation)
    Способ интерполяции значений.
  • Aggregate2 (D8Aggregate)
    Дополнительная обработка данных после агрегирования с методом Aggregate.

ReadArchiveProc

Команда чтения архивных значений параметров Дельта и их обработки с помощью D8DataProcessor.

Заменена командой ReadArchive2.

Свойства:

  • Start
    Начальный момент времени диапазона запрашиваемых архивных значений.
  • Stop
    Конечный момент времени диапазона запрашиваемых архивных значений.
  • Timezone
    Часовой пояс, в который нужно переводить метки времени.
  • GroupBy
    Способ группировки результирующих данных.
    • Time - по времени.
    • Param - по параметру.
    • ParamBase - по базовым SID-идентификаторам.
    • ParamBaseAndTime - по базовым SID-идентификаторам и времени.
  • DataFields
    Поля значений, выводимые в результат:
    • Moment - запрошенный момент времени.
    • MomentOA - запрошенный момент времени в виде числа (OA Date).
    • SID - идентификатор SID параметра Дельта.
    • Timestamp - метка времени значения.
    • TimestampOA - метка времени значения в виде числа (OA Date).
    • Value - значение в виде числа.
    • ValueString - значение в виде строки.
    • ValueAuto - значение с автоматическим определением нужного формат (строка/число).
    • State - состояние значения (в виде числа).
    • StateString - состояние значения (в виде строки).
    • StateHex - состояние значения (в виде строки с шестнадцатеричным представлением).
    • XState - расширенное состояние значения.
    • Quality - качество значения.
    • RowNumber - порядковый номер строки.
  • ParamSids
    SID-идентификаторы параметров, чьи значения нужно прочитать из архива.
  • ParamSidsBase
    Базовые SID-идентификаторы. Если указаны, то массив ParamSids содержит относительные SID, разрешаемые относительно ParamSidsBase.
     
  • Request.Xxx
    Настройки запросов на чтение и обработку данных. Каждое свойство Request.Xxx - это массив, длина которого равна количеству параметров ParamSids. Элемент N в любом массиве Request.Xxx относится к параметру N в массиве ParamSids. Если в массиве Request.Xxx задано элементов меньше, чем в ParamSids, то последний элемент повторяется до нужной длины массива. Если не задано ни одного элемента, то используются значения по умолчанию.
  • Request.ParamAlias
    Псевдоним параметра. Используется как идентификатор в результирующем массиве данных.
  • Request.Substitution (false/true)
    Если true, то этот параметр используется как подстановочное значение для предыдущего параметра в случае неудовлетворительного качества данных.
    Может быть задано несколько таких подстановочных параметров подряд для одного параметра.
  • Request.QualityThreshold
    Минимальное качество данных (от 0 до 1), которое считается удовлетворительным.
  • Request.CombineResultsByQuality (false/true)
    Если true, то результирующие данные для одного параметра и подстановочных параметров будут обработаны построчно. Для каждой строки в результат будет включено значение с максимальным качеством.
    Если false, то результирующие выборки не комбинируются. Вместо этого выбирается выборка целиком с максимальным показателем качества.
  • Request.StartTimeShift
    Сдвиг начального времени Start для этого параметра.
  • Request.StopTimeShift
    Сдвиг конечного времени Stop для этого параметра.
  • Request.StopInclusive (false/true)
    Если true, то значение с меткой времени равной концу запрашиваемого временного диапазона включается в выборку.
  • Request.QosInterval
    Интервал времени, используемый для оценки качества обработанных данных.
  • Request.RawDataInterval
    Интервал необработанных данных.
  • Request.ReadSkipStateFilter
    Маска флагов состояния значений параметра, исключаемых из выборки исходных данных.
  • Request.ReadIncludeStateFilter
    Маска флагов состояния значений параметра, которые должны присутствовать в состоянии значения, чтобы оно было включено в выборку.
  • Request.ReadMethod (D8DataProcReadOperation)
    Метод чтения данных. Если не указан, то определяется автоматически.
    • ReadRaw
    • ReadAtTime
    • ReadRawMany
    • ReadAtTimeMany
    • ReadRawEachMoment
    • ReadRawFromDataset
  • Request.ReadStep
    Шаг чтения архивных значений.
  • Request.ReadBounds (false/true)
    Если true при чтении архивных значений используется поиск граничных точек.
  • Request.ReadOptions (ReadFlags)
    Настройки операции чтения архива.
    • NoValues
    • BoundsForEachMoment
    • SuggestBulkRead
    • CacheOnly
    • FillUnknownValues
  • Request.ReadInterpolation (D8Interpolation)
    Способ интерполяции необработанных архивных данных.
    • None
    • Step
    • Line
    • LastValue
  • Request.RawDataTimeShift
    Величина, на которую будут сдвинуты метки времени прочитанных значений.
  • Request.ProcessingStep
    Шаг обработки, на который сдвигается время для получения начала очередного интервала для обработки данных.
  • Request.ProcessingSpan
    Длина интервал, на котором выполняется обработка.
  • Request.ProcessingAggregate (D8Aggregate)
    Способ обработки данных.
  • Request.ProcessingInterpolation (D8Interpolation)
    Интерполяция, используемая для обработки данных.
  • Request.ProcessedDataInterval
    Интервал значений, которые получаются после обработки данных.
  • Request.AuxProcessingStateFilter
    Шаг дополнительной обработки.
  • Request.AuxProcessingStep
    Интервал дополнительной обработки.
  • Request.AuxProcessingSpan
    Способ дополнительной обработки.
  • Request.AuxProcessingAggregate (D8Aggregate)
    Способ дополнительной обработки.
  • Request.AuxProcessingInterpolation (D8Interpolation)
    Интерполяция дополнительной обработки.
  • Request.AuxProcessedDataInterval
    Интервал значений, которые получаются после дополнительной обработки данных.
  • Request.CoefK
    Коэффициент, на который будут помножены результирующие значения.
  • Request.CoefC
    Коэффициент, который будет прибавлен к результирующим значениям.

ReadArchive2

Команда чтения архивных значений параметров Дельта и их обработки с помощью D8DataProcessor. Расширенная версия команды ReadArchiveProc.

Позволяет формировать произвольный набор столбцов в результирующих данных, а не только задавать столбцы с помощью ArchiveDataFields.
Позволяет определять параметры Дельта, не только по SID, но и с помощью строки запроса к НСИ инстнасов.

Если указано хотя бы одно свойство FindParamInstanceTypeRegex, FindParamInstanceNameRegex или FindParamInstanceQuery, то поиск параметров выполняется с использованием этой группы свойств. В этом случае инстансы находятся инстансы находятся с помощью указанного регулярного выражения для типов инстансов и имен инстансов. Опционально может быть указана строка запроса параметров, выполняемого в НСИ найденных инстансов.
Если ни одного свойств FindParamXxx не задано, то поиск выполняется по SID-идентификаторам, заданных в свойствах ParamSids и ParamSidsBase.

Содержит все свойства команды ReadArchiveProc и дополнительные свойства:

  • FindParamInstanceTypeRegex
    Регулярное выражение для поиска инстансов по названиям их типов. Если это свойство не задано, то в поиск включаются инстансы любых типов.
  • FindParamInstanceNameRegex
    Регулярное выражение для поиска инстансов по их имени. Если это свойство не задано, то в поиск включаются инстансы с любым именем.
  • FindParamInstanceQuery
    Запрос к НСИ найденных инстансов. Если не указан, то используются все параметры каждого найденного инстанса.
  • Column.Xxx
    Содержат определения столбцов результирующей таблицы.
    Если задан массив Column.Definition, то именно он определяет набор столбцов в результирующей таблице. Иначе для этого используется свойство ArchiveDataFields.
  • Column.Name
    Имя столбца. Если не задано, то генерируется автоматически.
  • Column.Caption
    Заголовок столбца. Если не задан, то определяется автоматически по строке определения Column.Definition.
  • TimestampInHeader (false/true)
    Если true, то нужно вывести метки времени в заголовок результирующей таблицы.

ReadArchiveRecords

Команда выборки записей record-параметров из архива.

Содержит команды:

  • ParamSid
    Идентификатор record-параметра или мета-типа, записи которого нужно выбрать их архива, с указанием имени инстанса.
    Например: TEST_INST.#TypeShortName или TEST_INST.123#MyType.
  • SelectFields
    Список названий свойств мета-типа, которые должны попасть в результ выборки. Если не указан, то запрашиваются все свойства.
  • SelectCondiotion.Xxx
    Настройки фильтрации и сортировки выборки.
  • SelectCondiotion.Field
    Название свойства, на котором выполняется условие или по которому выполняется сортировка.
  • SelectCondiotion.Type
    Тип обработки (условие или направление сортировки). Варианты значения:
    • Equal
    • NotEqual
    • In
    • NotIn
    • Less
    • LessOrEqual
    • Greater
    • GreaterOrEqual
    • GreaterAndLess
    • GreaterAndLessOrEqual
    • GreaterOrEqualAndLess
    • GreaterOrEqualAndLessOrEqual
    • NotGreaterAndLess
    • NotGreaterAndLessOrEqual
    • NotGreaterOrEqualAndLess
    • NotGreaterOrEqualAndLessOrEqual
    • Like
    • NotLike
    • Flags
    • NotFlags
    • IsNull
    • NotIsNull
    • OrGroup
    • NotOrGroup
    • AndGroup
    • NotAndGroup
    • Top
    • OrderAsc
    • OrderDesc
  • SelectCondiotion.Argument
    Аргумент условия.
     
  • Column.Xxx
    Содержат определения столбцов результирующей таблицы.
    Если задан массив Column.Definition, то именно он определяет набор столбцов в результирующей таблице. Иначе для этого используется свойство ArchiveDataFields.
  • Column.Name
    Имя столбца. Если не задано, то генерируется автоматически.
  • Column.Caption
    Заголовок столбца. Если не задан, то определяется автоматически по строке определения Column.Definition.
  • Column.Definition
    Строка определения столбца.

RunScript

Команда для запуска скрипта на C# или выполнения метода указанного типа .NET.

  • References
    Зависимости для выполнения скрипта. Массив из строк с именами файлов сборок, которые необходимо загрузить для выполнения скрипта.
  • Module
    Модуль, содержащий код, который нужно выполнить.
    Если оканчивается на ".dll", то будет загружена сбора с именем Module и внутри нее будет выполнен поиск и выполнение необходимого метода Method.
    Если оканчивается на ".cs", то будет загружен файл с кодом на C# из файла с именем Module, файл будет скомпилирован и внутри полученной сборки будет выполнен поиск и выполнение необходимого метода Method.
    В остальных случаях Method - это название листа excel, текст на котором будет объеденен и использован как код на C#. Этот код будет скомпилирован и внутри полученной сборки будет выполнен поиск и выполнение необходимого метода Method.
  • Method
    Полное имя метода типа C#, который нужно выполнить. Метод должен быть публичным и статическим. Часть Method до последней точки интерпретируется как имя типа, остальное - имя метода.

RunFormula

Команды для выполнения скриптов на языке FL.

Для каждой ячейки Excel в регионе, указанном в SrcAddress, последовательно слева напрво и сверху вних, выолняется формула FL, записанная в этой ячейке. Все переменные, сформированные за время выполнения формулы в первой ячейке, переносятся в контекст выполнения формулы в следующей ячейке. Если формула не заканчивается точкой с запятой, то результат выполнения последнего выражения в формуле помещается на ячейку Excel, правее ячейки с формулой.

В формулах можно использовать специализированные функции FL:
  • XR_GET - получение значения из документа Excel с отчетом;
  • XR_SET - запись значения в документ Excel.
После завершения выполнения формул в SrcAddress, результаты выполнения (переменные, полученные в результате выполнения) могут быть записаны в ячейки Excel на листах, перечисленных в OutputWorksheets. Для каждой ячейки на каждом листе OutputWorksheets выполняется обработка:
  • если формула ячейки имеет вид "|formula", то выполняется формула с текстом formula, а результат записывыается в ячейку;
  • если комментарий ячейки имеет вид |formula, то выполняется формула с текстом formula, а результат записывыается в комментарий ячейки.

Свойства команды:

  • SrcAddress
    Регион ячеек, содержащий формулы FL.
  • Timezone
    Локальный часовой пояс.
     
  • CtxStart
    Начало времени для контекста выполнения формул. Задает начало временного интервала интересующих данных для функций формулы, где явно не указано начало времени. По умолчанию не задано.
     
  • CtxStop
    Конец времени для контекста выполнения формул. Задает конец временного интервала интересующих данных для функций формулы, где явно не указан конец времени. По умолчанию не задано.
  • CtxStep
    Шаг чтения или обработки данных для контекста выполнения формул. Задает шаг для функций формулы, где он не указан явно. По умолчанию - ##total.
     
  • CtxInterval
    Интервал обработки данных для контекста выполнения формул. Задает интервал для функций формулы, где он не указан явно. По умолчанию - ##total.
     
  • OutputWorksheets
    Массив строк с названиями листов, в которые нужно поместить результат работы.

GenerateSheet

Команда используется для генерации шагов отчета во время построения отчета.

Свойства:

  • CycleData
    Массив, элементам которого будет выполнен цикл. Операция генерации страницы отчета будет выполнена для каждого элемента в этом массиве.
     
  • CycleDataVar [ValueIsAddress]
    Адрес ячейки, в которую будет копироваться очередной элемент из массива CycleData перед выполнением очередной итерации цикла.
    Можно не указывать, если эта функциия не требуется.
     
  • CycleIndexVar [ValueIsAddress]
    Адрес ячейки, в которую будет записываться номер (от нуля) итерации цикла перед выполнением очередной итерации цикла.
    Можно не указывать, если эта функциия не требуется.
     
  • SetValue
    Подстановочные значения.
    Содержит два массива. В первом - адреса ячеек, в которые нужно вписать подстановочные значения. Во втором - адреса ячеек, из которых нужно прочитать подстановочные значения.
    Можно не указывать, если эта функциия не требуется.
     
  • SetValue.Addr
    Адрес ячейки, в которую нужно записать подстановочное значение.
    По умолчанию используется адрес ячейки справа от ячейки с названием этого свойства.
     
  • SetValue.Value
    Адрес ячейки, из которой нужно прочитать подстановочное значение.
    По умолчанию используется адрес ячейки справа от ячейки с названием этого свойства.
  • SetFormula
    Подстановочные формулы.
    Содержит два массива. В первом - адреса ячеек, в которые нужно вписать подстановочные формулы. Во втором - адреса ячеек, из которых нужно прочитать подстановочные формулы.
    Можно не указывать, если эта функциия не требуется.
  • SetFormula.Addr
    Адрес ячейки, в которую нужно записать подстановочную формулу.
    По умолчанию используется адрес ячейки справа от ячейки с названием этого свойства.
     
  • SetFormula.Value
    Адрес ячейки, из которой нужно прочитать подстановочную формулу.
    По умолчанию используется адрес ячейки справа от ячейки с названием этого свойства.
  • CycleStepWorksheet
    Имя листа, содержащего шаг отчета, который будет выполнен на каждой итерации цикла.
    Можно не указывать, если эта функциия не требуется.
     
  • TemplateWorksheetList
    Массив с именами листов шаблона, которые будут использоваться в качестве шаблонов.
    На каждой итерации цикла будут создаваться копии этих листов.
    Должно быть указано обязательно.
     
  • WorksheetNameList [ValueIsAddress | UseCurrentCellAddress]
    Адрес региона ячеек, содержащего массив с именами, которые будут даны копиям листов, указанных в TemplateWorksheetList, в завершении очередной итерации цикла.
    По умолчанию используется адрес ячейки справа от ячейки с названием этого свойства.
    Можно не указывать, если эта функциия не требуется.

Свойства блоков

  • Скалярное значение содержится в одной ячейке.
  • Значение-массив содержится в горизонтальном регионе ячеек и ограничивается справа пустой ячейкой.
  • Пустые строки равносильны тому, что значения нет (null).
  • Если при чтении значения свойства из отчета в код оказывается, что ячейка содержит формулу, то эта формула будет выполнена.
  • Если при чтении значения свойства из отчета в код оказывается, что ячейка содержит ссылку на другую ячейку (формулу вида =A1), то значение будет прочитано по ссылке.
  • Если свойство отмечено атрибутом D8BlockProperty(ValueIsAddress), то считается, что соответствующая ячейка отчета содержит адрес региона в виде формулы или текстового значения ячейки, либо название переменной отчета.
  • Если свойство отмечено атрибутом D8BlockProperty(ValueIsFormula), то считается, что значением для него будет формула соответствующей ячейки или текстовое значение этой ячейки.
  • Если свойство отмечено атрибутом D8BlockProperty(OutputToWorksheet), то его значение будет скопировано из кода в соответствующую ячейку отчета.
  • Если свойство отмечено атрибутом D8BlockProperty(OutputToVariable), то его значение будет скопировано в указанную переменную отчета.
  • Если свойство называется Value, то его значение будет скопировано из кода в соответствующую ячейку отчета.
  • При попытке сконвертировать значение-массив в тип Enum все элементы массива конвертируются в строки, склеиваются через запятую в одну строку и далее конвертируются с помощью Enum.Parse.

Последовательность обработки блоков

  1. При выполнение хост приложением метода ID8Report.PrepareReport для первого блока Settings листа Report выполняется копирование значений свойств блока из отчета в код и вызов IBlockInit.Initialize. Копируются значения всех свойств, для которых в коде определен сеттер.
  1. Реализация IBlockInit.Initialize класса блока может выполнить необходимые действия и подготовить выходные данные этого блока или записать что-то в отчет.
  1. Затем значения свойств обрабатываемого блока копируются из кода в отчет. Копируются значения всех свойств, отмеченных в коде атрибутом D8BlockProperty(OutputToWorksheet) и для которых определен геттер.
  1. Обработка повторяется для каждого блока Settings листа Report.
  1. При выполнении хост приложением метода ID8Report.PrepareStep для блоков Settings листа Step1 выполняется обработка блока Settings листа Step1 точно так же, как это было сделано для листа Report.
  1. [продолжается выполнение ID8Report.PrepareStep] Далее для каждого блока Arguments листа Step1 выполняется копирование значений свойств блока из отчета в код и вызов IBlockInit.Initialize. Копируются значения всех свойств, для которых в коде определен сеттер.
  1. Далее хост-приложение отображает форму с полями ввода полученными как результат выполнения ID8Report.PrepareStep, ожидает от пользователя заполнения полей и передает заполненные поля плагину в методе ID8Report.PerformStep.
  1. При выполнении хост приложением метода ID8Report.ValidateStep для каждого блока Arguments листа Step1 выполняется метод IBlockValidate.Validate. При этом проверяется корректность введенных данных и каике-то данные могут быть выведены в отчет.
  1. При выполнении хост приложением метода ID8Report.PerformStep значения свойств каждого блока Arguments листа Step1 копируются из кода в отчет. Копируются значения всех свойств, отмеченных в коде атрибутом D8BlockProperty(OutputToWorksheet) и для которых определен геттер.
  1. [продолжается выполнение ID8Report.PerformStep] Далее для первого блока Command листа Step1 выполняется копирование значений свойств блока из отчета в код. Копируются значения всех свойств, для которых в коде определен сеттер.
  1. [продолжается выполнение ID8Report.PerformStep] Для обрабатываемого блока выполняется метод CommandBlockBase.Execute. При этом выполняются необходимые действия, для которых предназначен данный блок-команда. Результат выполнения команды может быть записан в отчет.
  1. [продолжается выполнение ID8Report.PerformStep] Обрабатываются все остальные блоки Command листа Step1.
  1. На этом выполнение первого шага отчета закончено. При наличии других шагов повторяются пункты с 5 по 12 для листов Step2, Step3 и т.д.

Проблемы

Из-за ошибок в EPPlus сгенерированный отчет при определенных обстоятельствах оказывается поврежден. Excel при попытке открыть такой отчет предлагает восстановить документ и успешно его восстанавливает.

Замечено, что проблема проявляется:

  • Когда в отчет выводится double.NaN.
    Возможность этого была устранена на уровне кода, но повторение проблемы вероятно.
     
  • Бывает, что простая excel-формула типа =$C$13 после открытия документа с макетом отчета через EPPlus и его сохранения в построенный отчет вызывает ошибку. В таком случае достаточно очистить значение ячейки в макете и заполнить его заново.

Если при попытки форматирования региона ячеек с помощью GrowInsert происходит исключение с текстом, что "значение не может быт меньше 1", то нужно создать в макете новый лист, скопировать туда содержимое проблемного листа, старый лист удалить, новый переименовать как старый. Пример исключения:

Csit.Delta.Client.ExcelReports.D8ExcelReportException: Ошибка при выполнении команды DrawTable. ---> System.ArgumentOutOfRangeException: Row cannot be less than 1.
Parameter name: value
   at OfficeOpenXml.ExcelCellAddress.set_Row(Int32 value)
   at OfficeOpenXml.ExcelNamedRangeCollection.InsertRows(Int32 rowFrom, Int32 rows, ExcelNamedRange namedRange)
   at OfficeOpenXml.ExcelNamedRangeCollection.Insert(Int32 rowFrom, Int32 colFrom, Int32 rows, Int32 cols, Func`2 filter)
   at OfficeOpenXml.ExcelWorksheet.InsertRow(Int32 rowFrom, Int32 rows, Int32 copyStylesFromRow)
   at Csit.Delta.Client.ExcelReports.CommandBlockBase.PrepareGrowDstRangeWithInsert()
   at Csit.Delta.Client.ExcelReports.CommandBlockBase.Execute(ExecutionContext context)
   at Csit.Delta.Client.ExcelReports.D8ExcelReport.InternalDoStep(ExecutionContext stepContext)
   --- End of inner exception stack trace ---
   at Csit.Delta.Client.ExcelReports.D8ExcelReport.InternalDoStep(ExecutionContext stepContext)
   at Csit.Delta.Client.ExcelReports.D8ExcelReport.PerformStep(D8ReportStep step)
   at Csit.Delta.Monitor.Library.Controls.ReportDialog.TransitProc(Object pState)

Если после построения отчета пустые ячейки оказываются закрашены в розовый, то нужно в макете выбрать весь лист (клик в левой верхней угловой ячейке листа) и установить заливка "Без заливки". Далее восстановить заливку внутри листа.

История версий

  • 1.0.21.0811
    • Добавлена команда AppendSheet.
  • 1.0.21.0722
    • Добавлена возможность загрузки шаблона отчета из указанного произвольного потока.
  • 1.0.19.1030
    • Выделение из интерфейса ID8ConnectionMng методов работы с базами данных в интерфейс ID8DbConnectionMng
  • 1.0.19.1002
    • Добавлена локализация сообщений валидации полей отчета.
  • 1.0.19.0926
    • Добавлена команда выборки записей record-параметров ReadArchiveRecords.
  • 1.0.19.0624
    • Улучшена обработка DstRangeOffset.
  • 1.0.19.0610
    • Добавлена настройка Timezone_UtcBias.
  • 1.0.19.0123
    • Исправлена ошибка, которая приводила к зацикливанию при попытки использования метода GrowInsert на пустом листе.
  • 1.0.18.0828
    • Добавлена возможность настройки контекста выполнения формул для команды RunFormula.
       
  • 1.0.18.0130
    • Исправлена ошибка в обработке относительных SID.
  • 1.0.18.0130
    • Добавлена поддержка настроек выполнения скриптов FL.
  • 1.0.18.0125
    • Оптимизировано форматирование листов excel с помощью вставки строк (GrowInsert).
  • 1.0.18.0119
    • Добавлена FL-функция XR_SET для вывода данных из FL-скрипта в отчет.
  • 1.0.17.1219
    • Добавлена функция создания параметров Дельта для SID, содержащих специальный разделитель.
  • 1.0.17.1218
    • Теперь классы блоков отчета загружаются из текущей сборки.
    • Возвращены ранее удаленные свойства Request.ProcessingStateFilter и Request.AuxProcessingStateFilter команд чтения данных из соображений совместимости.
  • 1.0.17.1204
    • Исправлена ошибка, которая возникала при удалении формул в команде RemoveFormula при обработке объединенных ячеек.
    • Для RemoveFormula теперь можно указать массив в качестве значения Sheet.
    • Добавлена команда RunFormula.
  • 1.0.17.1116
    • В команду GetInstanceList добавлена поддержка фильтрации инстансов.
  • 1.0.17.1026
    • Исправлена ошибка, которая приводила к исключению при обработки команды ReadArchive при чтении необработанных данных за интервал с группировкой по времени. Ошибка проявлялась, если в списке запрашиваемых параметров были параметры с несуществующими сидами.
  • 1.0.17.1004
    • Добавлены команды GetInstDevices и GetInstGroups для получения таблицы устройств и групп из всех инстансов.
    • Добавлена возможность указывать строковые SID параметров относительно базовой строки.
    • Для команд ReadArchive2 и ReadParamDb добавлена возможность поиска параметров с помощью строки запроса.
  • 1.0.17.0322
    • Добавлен флаг AllowSingleRow для свойства команды DstRangeFormat.
  • 1.0.17.0209
    • Исправлена ошибка, приводившая к скрыванию результатов команды ReadArchive для случая ее использования без указания списка параметров.
  • 1.0.16.1202
    • Команда удаления формул теперь поддерживает wildcards.
  • 1.0.16.715
    • Добавлена поддержка вывода результатов в таблицу (а не только в xlsx).
    • Добавлена новая версия команды выборки данных - ReadArchive2.
  • 1.0.16.0314
    • Теперь макеты отчетов могут лежать в подпапках с именем, равным LocalizationId. Если нужный макет не будет найден в такой папке, то используется путь без LocalizationId.
  • 1.0.15.1203
    • Для команды ReadArchive исправлена ошибка чтения через ReadAtTime.
    • Добавлена возможность игнорирования ошибок поиска параметров.
  • 1.0.15.1008
    • Для команды ReadArchive добавлена обработка исключений интерфейса работы с архивом и вывод этих исключений в сводку построения отчета.

Ссылки

[1]   Строка определения временной зоны

[2]   Строка определения столбца